/**
 * 用户详情对话框（可用于添加和修改对话框）
 */
var UserInfoDlg = {
	userInfoData : {},
	validateFields : {
		account : {
			validators : {
				notEmpty : {
					message : '账户不能为空'
				}
			}
		},
		roleid : {
			validators : {
				notEmpty : {
					message : '角色不能为空'
				}
			}
		},
		name : {
			validators : {
				notEmpty : {
					message : '姓名不能为空'
				}
			}
		},
		password : {
			verbose: false,//多验证的情况下默认第一验证错误，则提示当前错误信息后面的验证不执行
			validators : {
				notEmpty : {
					message : '密码不能为空'
				},
				//密码需由 数组与字母组成的8-16位字符
				/*^ 匹配一行的开头位置
				(?![0-9]+$) 预测该位置后面不全是数字
				(?![a-zA-Z]+$) 预测该位置后面不全是字母
				[0-9A-Za-z] {8,16} 由8-16位数字或这字母组成
				$ 匹配行结尾位置*/
				regexp: {
	                   regexp: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/,
	                    message: '数组与字母组成的8-16位字符'
	             },
				identical : {
					field : 'rePassword',
					message : '两次密码不一致'
				},
			}
		},
		rePassword : {
			verbose: false,//多验证的情况下默认第一验证错误，则提示当前错误信息后面的验证不执行
			validators : {
				notEmpty : {
					message : '密码不能为空'
				},
				regexp: {
	                   regexp: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/,
	                    message: '数组与字母组成的8-16位字符'
	             },
				identical : {
					field : 'password',
					message : '两次密码不一致'
				},
			}
		}
	}
};

/**
 * 清除数据
 */
UserInfoDlg.clearData = function() {
	this.userInfoData = {};
};

/**
 * 设置对话框中的数据
 * 
 * @param key
 *            数据的名称
 * @param val
 *            数据的具体值
 */
UserInfoDlg.set = function(key, val) {
	this.userInfoData[key] = (typeof val == "undefined") ? $("#" + key).val(): val;
	return this;
};

/**
 * 设置对话框中的数据
 * 
 * @param key
 *            数据的名称
 * @param val
 *            数据的具体值
 */
UserInfoDlg.get = function(key) {
	return $("#" + key).val();
};

/**
 * 关闭此对话框
 */
UserInfoDlg.close = function() {
	parent.layer.close(window.parent.MgrUser.layerIndex);
};

/**
 * 关闭修改密码对话框
 */
UserInfoDlg.pwdClose = function() {
	parent.layer.close(window.parent.Top.layerIndex);
};

/**
 * 收集数据
 */
UserInfoDlg.collectData = function() {
	this.set('id').set('account').set('roleid').set('password')
		.set('email').set('name').set('birthday').set('rePassword')
		.set('phone').set('sex');
	this.set('status',$('#status').prop('checked')?1:2);
    this.set('avatarUrl');
};

/**
 * 验证两个密码是否一致
 */
UserInfoDlg.validatePwd = function() {
	var password = this.get("password");
	var rePassword = this.get("rePassword");
	if (password == rePassword) {
		return true;
	} else {
		return false;
	}
};

/**
 * 验证数据是否为空
 */
UserInfoDlg.validate = function() {
	$('#userInfoForm').data("bootstrapValidator").resetForm();
	$('#userInfoForm').bootstrapValidator('validate');
	return $("#userInfoForm").data('bootstrapValidator').isValid();
};

/**
 * 提交添加用户
 */
UserInfoDlg.addSubmit = function() {

	this.clearData();
	this.collectData();

	if (!this.validate()) {
		return;
	}

	if (!this.validatePwd()) {
		Feng.error("两次密码输入不一致");
		return;
	}

	// 提交信息
	var ajax = new $ax(Feng.ctxPath + "/mgr/add", function(data) {
		Feng.success("添加成功!");
		window.parent.MgrUser.table.refresh();
		UserInfoDlg.close();
	}, function(data) {
		Feng.error("添加失败!" + data.responseJSON.message + "!");
	});
	ajax.set(this.userInfoData);
	ajax.setZLoadingIn(true);
	ajax.setZLoadingOut(true);
	ajax.start();
};

/**
 * 提交修改
 */
UserInfoDlg.editSubmit = function() {

	this.clearData();
	this.collectData();

	if (!this.validate()) {
		return;
	}

	// 提交信息
	var ajax = new $ax(Feng.ctxPath + "/mgr/edit", function(data) {
		Feng.success("修改成功!");
		if (window.parent.MgrUser != undefined) {
			window.parent.MgrUser.table.refresh();
			UserInfoDlg.close();
		}
	}, function(data) {
		Feng.error("修改失败!" + data.responseJSON.message + "!");
	});
	ajax.set(this.userInfoData);
	ajax.setZLoadingIn(true);
	ajax.setZLoadingOut(true);
	ajax.start();
};

/**
 * 修改密码
 */
UserInfoDlg.chPwd = function() {
	var reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/;
	if(!reg.test($('#newPwd').val())){
		Feng.error("新密码需由数组与字母组成的8-16位字符!");
		return;
	}
	var ajax = new $ax(Feng.ctxPath + "/mgr/changePwd", function(data) {
		Feng.success("修改成功!");
		parent.layer.close(window.parent.ITop.layerIndex);
	}, function(data) {
		Feng.error("修改失败!" + data.responseJSON.message + "!");
	});
	ajax.set("oldPwd");
	ajax.set("newPwd");
	ajax.set("rePwd");
	ajax.setZLoadingIn(true);
	ajax.setZLoadingOut(true);
	ajax.start();

};

function onBodyDown(event) {
	if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" || $(
			event.target).parents("#menuContent").length > 0)) {
		UserInfoDlg.hideDeptSelectTree();
	}
};
/*
 * 切换Switchery开关函数
 * * switchElement Switchery对象
 * * checkedBool 选中的状态
 */
UserInfoDlg.setSwitchery=function(switchElement, checkedBool) {
    if ((checkedBool && !switchElement.isChecked()) || (!checkedBool && switchElement.isChecked())) {
        switchElement.setPosition(true);
        //switchElement.handleOnchange(true);
    }
};
/**
 * 初始化Switchery开关
 */
UserInfoDlg.initSwitchery=function(){
	var elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch'));
	elems.forEach(function(html) {
		new Switchery(html,{ color: '#038de5', jackColor: '#038de5' });
	});
};
$(function() {
	//表单验证初始化
	Feng.initValidator("userInfoForm", UserInfoDlg.validateFields);
	//初始化Switchery开关
	UserInfoDlg.initSwitchery();

    // 初始化头像上传
    var avatarUp = new $WebUpload("avatarUrl",Feng.ctxPath +"/uploadImage/upload?dir=file/avatar");
    avatarUp.init();
});
